// $ANTLR 3.3 Nov 30, 2010 12:46:29 /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g 2012-08-17 16:23:02

package org.apache.tapestry5.internal.antlr;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

import org.antlr.runtime.tree.*;

public class PropertyExpressionParser extends org.apache.tapestry5.internal.antlr.BaseParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "INTEGER", "DEREF", "RANGEOP", "DECIMAL", "LETTER", "DIGIT", "SIGN", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COMMA", "BANG", "LBRACE", "RBRACE", "COLON", "QUOTE", "A", "E", "F", "H", "I", "L", "N", "R", "S", "T", "U", "NULL", "TRUE", "FALSE", "THIS", "JAVA_ID_START", "JAVA_ID_PART", "IDENTIFIER", "SAFEDEREF", "WS", "STRING", "NUMBER_OR_RANGEOP", "INVOKE", "LIST", "MAP", "NOT"
    };
    public static final int EOF=-1;
    public static final int INTEGER=4;
    public static final int DEREF=5;
    public static final int RANGEOP=6;
    public static final int DECIMAL=7;
    public static final int LETTER=8;
    public static final int DIGIT=9;
    public static final int SIGN=10;
    public static final int LPAREN=11;
    public static final int RPAREN=12;
    public static final int LBRACKET=13;
    public static final int RBRACKET=14;
    public static final int COMMA=15;
    public static final int BANG=16;
    public static final int LBRACE=17;
    public static final int RBRACE=18;
    public static final int COLON=19;
    public static final int QUOTE=20;
    public static final int A=21;
    public static final int E=22;
    public static final int F=23;
    public static final int H=24;
    public static final int I=25;
    public static final int L=26;
    public static final int N=27;
    public static final int R=28;
    public static final int S=29;
    public static final int T=30;
    public static final int U=31;
    public static final int NULL=32;
    public static final int TRUE=33;
    public static final int FALSE=34;
    public static final int THIS=35;
    public static final int JAVA_ID_START=36;
    public static final int JAVA_ID_PART=37;
    public static final int IDENTIFIER=38;
    public static final int SAFEDEREF=39;
    public static final int WS=40;
    public static final int STRING=41;
    public static final int NUMBER_OR_RANGEOP=42;
    public static final int INVOKE=43;
    public static final int LIST=44;
    public static final int MAP=45;
    public static final int NOT=46;

    // delegates
    // delegators


        public PropertyExpressionParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public PropertyExpressionParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        
    protected TreeAdaptor adaptor = new CommonTreeAdaptor();

    public void setTreeAdaptor(TreeAdaptor adaptor) {
        this.adaptor = adaptor;
    }
    public TreeAdaptor getTreeAdaptor() {
        return adaptor;
    }

    public String[] getTokenNames() { return PropertyExpressionParser.tokenNames; }
    public String getGrammarFileName() { return "/Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g"; }


    public static class start_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "start"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:45:1: start : expression EOF ;
    public final PropertyExpressionParser.start_return start() throws RecognitionException {
        PropertyExpressionParser.start_return retval = new PropertyExpressionParser.start_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token EOF2=null;
        PropertyExpressionParser.expression_return expression1 = null;


        CommonTree EOF2_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:45:8: ( expression EOF )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:45:10: expression EOF
            {
            root_0 = (CommonTree)adaptor.nil();

            pushFollow(FOLLOW_expression_in_start130);
            expression1=expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) root_0 = (CommonTree)adaptor.becomeRoot(expression1.getTree(), root_0);
            EOF2=(Token)match(input,EOF,FOLLOW_EOF_in_start133); if (state.failed) return retval;

            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "start"

    public static class expression_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "expression"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:47:1: expression : ( keyword | rangeOp | constant | propertyChain | list | notOp | map );
    public final PropertyExpressionParser.expression_return expression() throws RecognitionException {
        PropertyExpressionParser.expression_return retval = new PropertyExpressionParser.expression_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        PropertyExpressionParser.keyword_return keyword3 = null;

        PropertyExpressionParser.rangeOp_return rangeOp4 = null;

        PropertyExpressionParser.constant_return constant5 = null;

        PropertyExpressionParser.propertyChain_return propertyChain6 = null;

        PropertyExpressionParser.list_return list7 = null;

        PropertyExpressionParser.notOp_return notOp8 = null;

        PropertyExpressionParser.map_return map9 = null;



        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:48:2: ( keyword | rangeOp | constant | propertyChain | list | notOp | map )
            int alt1=7;
            alt1 = dfa1.predict(input);
            switch (alt1) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:48:4: keyword
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_keyword_in_expression145);
                    keyword3=keyword();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, keyword3.getTree());

                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:49:4: rangeOp
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_rangeOp_in_expression150);
                    rangeOp4=rangeOp();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, rangeOp4.getTree());

                    }
                    break;
                case 3 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:50:4: constant
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_constant_in_expression155);
                    constant5=constant();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, constant5.getTree());

                    }
                    break;
                case 4 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:51:4: propertyChain
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_propertyChain_in_expression160);
                    propertyChain6=propertyChain();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, propertyChain6.getTree());

                    }
                    break;
                case 5 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:52:4: list
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_list_in_expression165);
                    list7=list();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, list7.getTree());

                    }
                    break;
                case 6 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:53:4: notOp
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_notOp_in_expression170);
                    notOp8=notOp();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, notOp8.getTree());

                    }
                    break;
                case 7 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:54:4: map
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_map_in_expression175);
                    map9=map();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, map9.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "expression"

    public static class keyword_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "keyword"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:57:1: keyword : ( NULL | TRUE | FALSE | THIS );
    public final PropertyExpressionParser.keyword_return keyword() throws RecognitionException {
        PropertyExpressionParser.keyword_return retval = new PropertyExpressionParser.keyword_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set10=null;

        CommonTree set10_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:57:9: ( NULL | TRUE | FALSE | THIS )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:
            {
            root_0 = (CommonTree)adaptor.nil();

            set10=(Token)input.LT(1);
            if ( (input.LA(1)>=NULL && input.LA(1)<=THIS) ) {
                input.consume();
                if ( state.backtracking==0 ) adaptor.addChild(root_0, (CommonTree)adaptor.create(set10));
                state.errorRecovery=false;state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "keyword"

    public static class constant_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "constant"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:59:1: constant : ( INTEGER | DECIMAL | STRING );
    public final PropertyExpressionParser.constant_return constant() throws RecognitionException {
        PropertyExpressionParser.constant_return retval = new PropertyExpressionParser.constant_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set11=null;

        CommonTree set11_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:59:9: ( INTEGER | DECIMAL | STRING )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:
            {
            root_0 = (CommonTree)adaptor.nil();

            set11=(Token)input.LT(1);
            if ( input.LA(1)==INTEGER||input.LA(1)==DECIMAL||input.LA(1)==STRING ) {
                input.consume();
                if ( state.backtracking==0 ) adaptor.addChild(root_0, (CommonTree)adaptor.create(set11));
                state.errorRecovery=false;state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "constant"

    public static class propertyChain_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "propertyChain"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:61:1: propertyChain : ( term DEREF propertyChain -> ^( DEREF term propertyChain ) | term SAFEDEREF propertyChain -> ^( SAFEDEREF term propertyChain ) | term );
    public final PropertyExpressionParser.propertyChain_return propertyChain() throws RecognitionException {
        PropertyExpressionParser.propertyChain_return retval = new PropertyExpressionParser.propertyChain_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token DEREF13=null;
        Token SAFEDEREF16=null;
        PropertyExpressionParser.term_return term12 = null;

        PropertyExpressionParser.propertyChain_return propertyChain14 = null;

        PropertyExpressionParser.term_return term15 = null;

        PropertyExpressionParser.propertyChain_return propertyChain17 = null;

        PropertyExpressionParser.term_return term18 = null;


        CommonTree DEREF13_tree=null;
        CommonTree SAFEDEREF16_tree=null;
        RewriteRuleTokenStream stream_DEREF=new RewriteRuleTokenStream(adaptor,"token DEREF");
        RewriteRuleTokenStream stream_SAFEDEREF=new RewriteRuleTokenStream(adaptor,"token SAFEDEREF");
        RewriteRuleSubtreeStream stream_propertyChain=new RewriteRuleSubtreeStream(adaptor,"rule propertyChain");
        RewriteRuleSubtreeStream stream_term=new RewriteRuleSubtreeStream(adaptor,"rule term");
        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:62:2: ( term DEREF propertyChain -> ^( DEREF term propertyChain ) | term SAFEDEREF propertyChain -> ^( SAFEDEREF term propertyChain ) | term )
            int alt2=3;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==IDENTIFIER) ) {
                int LA2_1 = input.LA(2);

                if ( (synpred12_PropertyExpressionParser()) ) {
                    alt2=1;
                }
                else if ( (synpred13_PropertyExpressionParser()) ) {
                    alt2=2;
                }
                else if ( (true) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 1, input);

                    throw nvae;
                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;
            }
            switch (alt2) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:62:4: term DEREF propertyChain
                    {
                    pushFollow(FOLLOW_term_in_propertyChain222);
                    term12=term();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_term.add(term12.getTree());
                    DEREF13=(Token)match(input,DEREF,FOLLOW_DEREF_in_propertyChain224); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_DEREF.add(DEREF13);

                    pushFollow(FOLLOW_propertyChain_in_propertyChain226);
                    propertyChain14=propertyChain();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_propertyChain.add(propertyChain14.getTree());


                    // AST REWRITE
                    // elements: propertyChain, term, DEREF
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 62:29: -> ^( DEREF term propertyChain )
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:62:32: ^( DEREF term propertyChain )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(stream_DEREF.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_term.nextTree());
                        adaptor.addChild(root_1, stream_propertyChain.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:63:4: term SAFEDEREF propertyChain
                    {
                    pushFollow(FOLLOW_term_in_propertyChain241);
                    term15=term();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_term.add(term15.getTree());
                    SAFEDEREF16=(Token)match(input,SAFEDEREF,FOLLOW_SAFEDEREF_in_propertyChain243); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_SAFEDEREF.add(SAFEDEREF16);

                    pushFollow(FOLLOW_propertyChain_in_propertyChain245);
                    propertyChain17=propertyChain();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_propertyChain.add(propertyChain17.getTree());


                    // AST REWRITE
                    // elements: SAFEDEREF, propertyChain, term
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 63:33: -> ^( SAFEDEREF term propertyChain )
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:63:36: ^( SAFEDEREF term propertyChain )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(stream_SAFEDEREF.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_term.nextTree());
                        adaptor.addChild(root_1, stream_propertyChain.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 3 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:64:4: term
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_term_in_propertyChain260);
                    term18=term();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, term18.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "propertyChain"

    public static class term_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "term"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:67:1: term : ( IDENTIFIER | methodInvocation );
    public final PropertyExpressionParser.term_return term() throws RecognitionException {
        PropertyExpressionParser.term_return retval = new PropertyExpressionParser.term_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token IDENTIFIER19=null;
        PropertyExpressionParser.methodInvocation_return methodInvocation20 = null;


        CommonTree IDENTIFIER19_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:67:6: ( IDENTIFIER | methodInvocation )
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==IDENTIFIER) ) {
                int LA3_1 = input.LA(2);

                if ( (LA3_1==LPAREN) ) {
                    alt3=2;
                }
                else if ( (LA3_1==EOF||(LA3_1>=DEREF && LA3_1<=RANGEOP)||LA3_1==RPAREN||(LA3_1>=RBRACKET && LA3_1<=COMMA)||(LA3_1>=RBRACE && LA3_1<=COLON)||LA3_1==SAFEDEREF) ) {
                    alt3=1;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 3, 1, input);

                    throw nvae;
                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 3, 0, input);

                throw nvae;
            }
            switch (alt3) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:67:8: IDENTIFIER
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    IDENTIFIER19=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_term272); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    IDENTIFIER19_tree = (CommonTree)adaptor.create(IDENTIFIER19);
                    adaptor.addChild(root_0, IDENTIFIER19_tree);
                    }

                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:68:4: methodInvocation
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_methodInvocation_in_term277);
                    methodInvocation20=methodInvocation();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, methodInvocation20.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "term"

    public static class methodInvocation_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "methodInvocation"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:71:1: methodInvocation : (id= IDENTIFIER LPAREN RPAREN -> ^( INVOKE $id) | id= IDENTIFIER LPAREN expressionList RPAREN -> ^( INVOKE $id expressionList ) );
    public final PropertyExpressionParser.methodInvocation_return methodInvocation() throws RecognitionException {
        PropertyExpressionParser.methodInvocation_return retval = new PropertyExpressionParser.methodInvocation_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token id=null;
        Token LPAREN21=null;
        Token RPAREN22=null;
        Token LPAREN23=null;
        Token RPAREN25=null;
        PropertyExpressionParser.expressionList_return expressionList24 = null;


        CommonTree id_tree=null;
        CommonTree LPAREN21_tree=null;
        CommonTree RPAREN22_tree=null;
        CommonTree LPAREN23_tree=null;
        CommonTree RPAREN25_tree=null;
        RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
        RewriteRuleSubtreeStream stream_expressionList=new RewriteRuleSubtreeStream(adaptor,"rule expressionList");
        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:72:2: (id= IDENTIFIER LPAREN RPAREN -> ^( INVOKE $id) | id= IDENTIFIER LPAREN expressionList RPAREN -> ^( INVOKE $id expressionList ) )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==IDENTIFIER) ) {
                int LA4_1 = input.LA(2);

                if ( (LA4_1==LPAREN) ) {
                    int LA4_2 = input.LA(3);

                    if ( (LA4_2==RPAREN) ) {
                        alt4=1;
                    }
                    else if ( (LA4_2==INTEGER||LA4_2==DECIMAL||LA4_2==LBRACKET||(LA4_2>=BANG && LA4_2<=LBRACE)||(LA4_2>=NULL && LA4_2<=THIS)||LA4_2==IDENTIFIER||LA4_2==STRING) ) {
                        alt4=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return retval;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 4, 2, input);

                        throw nvae;
                    }
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 4, 1, input);

                    throw nvae;
                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:72:4: id= IDENTIFIER LPAREN RPAREN
                    {
                    id=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_methodInvocation291); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_IDENTIFIER.add(id);

                    LPAREN21=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_methodInvocation293); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN21);

                    RPAREN22=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_methodInvocation295); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN22);



                    // AST REWRITE
                    // elements: id
                    // token labels: id
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleTokenStream stream_id=new RewriteRuleTokenStream(adaptor,"token id",id);
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 72:32: -> ^( INVOKE $id)
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:72:35: ^( INVOKE $id)
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INVOKE, "INVOKE"), root_1);

                        adaptor.addChild(root_1, stream_id.nextNode());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:73:4: id= IDENTIFIER LPAREN expressionList RPAREN
                    {
                    id=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_methodInvocation311); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_IDENTIFIER.add(id);

                    LPAREN23=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_methodInvocation313); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN23);

                    pushFollow(FOLLOW_expressionList_in_methodInvocation315);
                    expressionList24=expressionList();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_expressionList.add(expressionList24.getTree());
                    RPAREN25=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_methodInvocation317); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN25);



                    // AST REWRITE
                    // elements: expressionList, id
                    // token labels: id
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleTokenStream stream_id=new RewriteRuleTokenStream(adaptor,"token id",id);
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 73:47: -> ^( INVOKE $id expressionList )
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:73:50: ^( INVOKE $id expressionList )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INVOKE, "INVOKE"), root_1);

                        adaptor.addChild(root_1, stream_id.nextNode());
                        adaptor.addChild(root_1, stream_expressionList.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "methodInvocation"

    public static class expressionList_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "expressionList"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:76:1: expressionList : expression ( COMMA expression )* ;
    public final PropertyExpressionParser.expressionList_return expressionList() throws RecognitionException {
        PropertyExpressionParser.expressionList_return retval = new PropertyExpressionParser.expressionList_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token COMMA27=null;
        PropertyExpressionParser.expression_return expression26 = null;

        PropertyExpressionParser.expression_return expression28 = null;


        CommonTree COMMA27_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:77:2: ( expression ( COMMA expression )* )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:77:4: expression ( COMMA expression )*
            {
            root_0 = (CommonTree)adaptor.nil();

            pushFollow(FOLLOW_expression_in_expressionList341);
            expression26=expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, expression26.getTree());
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:77:15: ( COMMA expression )*
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==COMMA) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:77:16: COMMA expression
            	    {
            	    COMMA27=(Token)match(input,COMMA,FOLLOW_COMMA_in_expressionList344); if (state.failed) return retval;
            	    pushFollow(FOLLOW_expression_in_expressionList347);
            	    expression28=expression();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression28.getTree());

            	    }
            	    break;

            	default :
            	    break loop5;
                }
            } while (true);


            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "expressionList"

    public static class rangeOp_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "rangeOp"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:80:1: rangeOp : from= rangeopArg RANGEOP to= rangeopArg -> ^( RANGEOP $from $to) ;
    public final PropertyExpressionParser.rangeOp_return rangeOp() throws RecognitionException {
        PropertyExpressionParser.rangeOp_return retval = new PropertyExpressionParser.rangeOp_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token RANGEOP29=null;
        PropertyExpressionParser.rangeopArg_return from = null;

        PropertyExpressionParser.rangeopArg_return to = null;


        CommonTree RANGEOP29_tree=null;
        RewriteRuleTokenStream stream_RANGEOP=new RewriteRuleTokenStream(adaptor,"token RANGEOP");
        RewriteRuleSubtreeStream stream_rangeopArg=new RewriteRuleSubtreeStream(adaptor,"rule rangeopArg");
        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:81:2: (from= rangeopArg RANGEOP to= rangeopArg -> ^( RANGEOP $from $to) )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:81:4: from= rangeopArg RANGEOP to= rangeopArg
            {
            pushFollow(FOLLOW_rangeopArg_in_rangeOp363);
            from=rangeopArg();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_rangeopArg.add(from.getTree());
            RANGEOP29=(Token)match(input,RANGEOP,FOLLOW_RANGEOP_in_rangeOp366); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_RANGEOP.add(RANGEOP29);

            pushFollow(FOLLOW_rangeopArg_in_rangeOp370);
            to=rangeopArg();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_rangeopArg.add(to.getTree());


            // AST REWRITE
            // elements: from, RANGEOP, to
            // token labels: 
            // rule labels: to, retval, from
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_to=new RewriteRuleSubtreeStream(adaptor,"rule to",to!=null?to.tree:null);
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
            RewriteRuleSubtreeStream stream_from=new RewriteRuleSubtreeStream(adaptor,"rule from",from!=null?from.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 81:43: -> ^( RANGEOP $from $to)
            {
                // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:81:46: ^( RANGEOP $from $to)
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot(stream_RANGEOP.nextNode(), root_1);

                adaptor.addChild(root_1, stream_from.nextTree());
                adaptor.addChild(root_1, stream_to.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;}
            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "rangeOp"

    public static class rangeopArg_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "rangeopArg"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:84:1: rangeopArg : ( INTEGER | propertyChain );
    public final PropertyExpressionParser.rangeopArg_return rangeopArg() throws RecognitionException {
        PropertyExpressionParser.rangeopArg_return retval = new PropertyExpressionParser.rangeopArg_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token INTEGER30=null;
        PropertyExpressionParser.propertyChain_return propertyChain31 = null;


        CommonTree INTEGER30_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:85:2: ( INTEGER | propertyChain )
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==INTEGER) ) {
                alt6=1;
            }
            else if ( (LA6_0==IDENTIFIER) ) {
                alt6=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }
            switch (alt6) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:85:4: INTEGER
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    INTEGER30=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_rangeopArg396); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    INTEGER30_tree = (CommonTree)adaptor.create(INTEGER30);
                    adaptor.addChild(root_0, INTEGER30_tree);
                    }

                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:86:4: propertyChain
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_propertyChain_in_rangeopArg401);
                    propertyChain31=propertyChain();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, propertyChain31.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "rangeopArg"

    public static class list_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "list"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:89:1: list : ( LBRACKET RBRACKET -> ^( LIST ) | LBRACKET expressionList RBRACKET -> ^( LIST expressionList ) );
    public final PropertyExpressionParser.list_return list() throws RecognitionException {
        PropertyExpressionParser.list_return retval = new PropertyExpressionParser.list_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token LBRACKET32=null;
        Token RBRACKET33=null;
        Token LBRACKET34=null;
        Token RBRACKET36=null;
        PropertyExpressionParser.expressionList_return expressionList35 = null;


        CommonTree LBRACKET32_tree=null;
        CommonTree RBRACKET33_tree=null;
        CommonTree LBRACKET34_tree=null;
        CommonTree RBRACKET36_tree=null;
        RewriteRuleTokenStream stream_LBRACKET=new RewriteRuleTokenStream(adaptor,"token LBRACKET");
        RewriteRuleTokenStream stream_RBRACKET=new RewriteRuleTokenStream(adaptor,"token RBRACKET");
        RewriteRuleSubtreeStream stream_expressionList=new RewriteRuleSubtreeStream(adaptor,"rule expressionList");
        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:89:6: ( LBRACKET RBRACKET -> ^( LIST ) | LBRACKET expressionList RBRACKET -> ^( LIST expressionList ) )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==LBRACKET) ) {
                int LA7_1 = input.LA(2);

                if ( (LA7_1==RBRACKET) ) {
                    alt7=1;
                }
                else if ( (LA7_1==INTEGER||LA7_1==DECIMAL||LA7_1==LBRACKET||(LA7_1>=BANG && LA7_1<=LBRACE)||(LA7_1>=NULL && LA7_1<=THIS)||LA7_1==IDENTIFIER||LA7_1==STRING) ) {
                    alt7=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 7, 1, input);

                    throw nvae;
                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;
            }
            switch (alt7) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:89:8: LBRACKET RBRACKET
                    {
                    LBRACKET32=(Token)match(input,LBRACKET,FOLLOW_LBRACKET_in_list413); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_LBRACKET.add(LBRACKET32);

                    RBRACKET33=(Token)match(input,RBRACKET,FOLLOW_RBRACKET_in_list415); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_RBRACKET.add(RBRACKET33);



                    // AST REWRITE
                    // elements: 
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 89:26: -> ^( LIST )
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:89:29: ^( LIST )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST, "LIST"), root_1);

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:90:4: LBRACKET expressionList RBRACKET
                    {
                    LBRACKET34=(Token)match(input,LBRACKET,FOLLOW_LBRACKET_in_list426); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_LBRACKET.add(LBRACKET34);

                    pushFollow(FOLLOW_expressionList_in_list428);
                    expressionList35=expressionList();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_expressionList.add(expressionList35.getTree());
                    RBRACKET36=(Token)match(input,RBRACKET,FOLLOW_RBRACKET_in_list430); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_RBRACKET.add(RBRACKET36);



                    // AST REWRITE
                    // elements: expressionList
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 90:37: -> ^( LIST expressionList )
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:90:40: ^( LIST expressionList )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST, "LIST"), root_1);

                        adaptor.addChild(root_1, stream_expressionList.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "list"

    public static class notOp_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "notOp"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:93:1: notOp : BANG expression -> ^( NOT expression ) ;
    public final PropertyExpressionParser.notOp_return notOp() throws RecognitionException {
        PropertyExpressionParser.notOp_return retval = new PropertyExpressionParser.notOp_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token BANG37=null;
        PropertyExpressionParser.expression_return expression38 = null;


        CommonTree BANG37_tree=null;
        RewriteRuleTokenStream stream_BANG=new RewriteRuleTokenStream(adaptor,"token BANG");
        RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:93:8: ( BANG expression -> ^( NOT expression ) )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:93:10: BANG expression
            {
            BANG37=(Token)match(input,BANG,FOLLOW_BANG_in_notOp451); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_BANG.add(BANG37);

            pushFollow(FOLLOW_expression_in_notOp453);
            expression38=expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_expression.add(expression38.getTree());


            // AST REWRITE
            // elements: expression
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 93:26: -> ^( NOT expression )
            {
                // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:93:29: ^( NOT expression )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(NOT, "NOT"), root_1);

                adaptor.addChild(root_1, stream_expression.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;}
            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "notOp"

    public static class map_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "map"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:96:1: map : ( LBRACE RBRACE -> ^( MAP ) | LBRACE mapEntryList RBRACE -> ^( MAP mapEntryList ) );
    public final PropertyExpressionParser.map_return map() throws RecognitionException {
        PropertyExpressionParser.map_return retval = new PropertyExpressionParser.map_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token LBRACE39=null;
        Token RBRACE40=null;
        Token LBRACE41=null;
        Token RBRACE43=null;
        PropertyExpressionParser.mapEntryList_return mapEntryList42 = null;


        CommonTree LBRACE39_tree=null;
        CommonTree RBRACE40_tree=null;
        CommonTree LBRACE41_tree=null;
        CommonTree RBRACE43_tree=null;
        RewriteRuleTokenStream stream_RBRACE=new RewriteRuleTokenStream(adaptor,"token RBRACE");
        RewriteRuleTokenStream stream_LBRACE=new RewriteRuleTokenStream(adaptor,"token LBRACE");
        RewriteRuleSubtreeStream stream_mapEntryList=new RewriteRuleSubtreeStream(adaptor,"rule mapEntryList");
        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:96:6: ( LBRACE RBRACE -> ^( MAP ) | LBRACE mapEntryList RBRACE -> ^( MAP mapEntryList ) )
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==LBRACE) ) {
                int LA8_1 = input.LA(2);

                if ( (LA8_1==RBRACE) ) {
                    alt8=1;
                }
                else if ( (LA8_1==INTEGER||LA8_1==DECIMAL||(LA8_1>=NULL && LA8_1<=THIS)||LA8_1==IDENTIFIER||LA8_1==STRING) ) {
                    alt8=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 8, 1, input);

                    throw nvae;
                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;
            }
            switch (alt8) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:96:8: LBRACE RBRACE
                    {
                    LBRACE39=(Token)match(input,LBRACE,FOLLOW_LBRACE_in_map472); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_LBRACE.add(LBRACE39);

                    RBRACE40=(Token)match(input,RBRACE,FOLLOW_RBRACE_in_map474); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_RBRACE.add(RBRACE40);



                    // AST REWRITE
                    // elements: 
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 96:22: -> ^( MAP )
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:96:25: ^( MAP )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(MAP, "MAP"), root_1);

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:97:4: LBRACE mapEntryList RBRACE
                    {
                    LBRACE41=(Token)match(input,LBRACE,FOLLOW_LBRACE_in_map485); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_LBRACE.add(LBRACE41);

                    pushFollow(FOLLOW_mapEntryList_in_map487);
                    mapEntryList42=mapEntryList();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_mapEntryList.add(mapEntryList42.getTree());
                    RBRACE43=(Token)match(input,RBRACE,FOLLOW_RBRACE_in_map489); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_RBRACE.add(RBRACE43);



                    // AST REWRITE
                    // elements: mapEntryList
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 97:31: -> ^( MAP mapEntryList )
                    {
                        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:97:34: ^( MAP mapEntryList )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(MAP, "MAP"), root_1);

                        adaptor.addChild(root_1, stream_mapEntryList.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "map"

    public static class mapEntryList_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "mapEntryList"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:100:1: mapEntryList : mapEntry ( COMMA mapEntry )* ;
    public final PropertyExpressionParser.mapEntryList_return mapEntryList() throws RecognitionException {
        PropertyExpressionParser.mapEntryList_return retval = new PropertyExpressionParser.mapEntryList_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token COMMA45=null;
        PropertyExpressionParser.mapEntry_return mapEntry44 = null;

        PropertyExpressionParser.mapEntry_return mapEntry46 = null;


        CommonTree COMMA45_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:100:14: ( mapEntry ( COMMA mapEntry )* )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:100:16: mapEntry ( COMMA mapEntry )*
            {
            root_0 = (CommonTree)adaptor.nil();

            pushFollow(FOLLOW_mapEntry_in_mapEntryList511);
            mapEntry44=mapEntry();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, mapEntry44.getTree());
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:100:25: ( COMMA mapEntry )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==COMMA) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:100:26: COMMA mapEntry
            	    {
            	    COMMA45=(Token)match(input,COMMA,FOLLOW_COMMA_in_mapEntryList514); if (state.failed) return retval;
            	    pushFollow(FOLLOW_mapEntry_in_mapEntryList517);
            	    mapEntry46=mapEntry();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) adaptor.addChild(root_0, mapEntry46.getTree());

            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);


            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "mapEntryList"

    public static class mapEntry_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "mapEntry"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:102:1: mapEntry : mapKey COLON expression ;
    public final PropertyExpressionParser.mapEntry_return mapEntry() throws RecognitionException {
        PropertyExpressionParser.mapEntry_return retval = new PropertyExpressionParser.mapEntry_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token COLON48=null;
        PropertyExpressionParser.mapKey_return mapKey47 = null;

        PropertyExpressionParser.expression_return expression49 = null;


        CommonTree COLON48_tree=null;

        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:102:10: ( mapKey COLON expression )
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:102:13: mapKey COLON expression
            {
            root_0 = (CommonTree)adaptor.nil();

            pushFollow(FOLLOW_mapKey_in_mapEntry528);
            mapKey47=mapKey();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, mapKey47.getTree());
            COLON48=(Token)match(input,COLON,FOLLOW_COLON_in_mapEntry530); if (state.failed) return retval;
            pushFollow(FOLLOW_expression_in_mapEntry533);
            expression49=expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, expression49.getTree());

            }

            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "mapEntry"

    public static class mapKey_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "mapKey"
    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:104:1: mapKey : ( keyword | constant | propertyChain );
    public final PropertyExpressionParser.mapKey_return mapKey() throws RecognitionException {
        PropertyExpressionParser.mapKey_return retval = new PropertyExpressionParser.mapKey_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        PropertyExpressionParser.keyword_return keyword50 = null;

        PropertyExpressionParser.constant_return constant51 = null;

        PropertyExpressionParser.propertyChain_return propertyChain52 = null;



        try {
            // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:104:8: ( keyword | constant | propertyChain )
            int alt10=3;
            switch ( input.LA(1) ) {
            case NULL:
            case TRUE:
            case FALSE:
            case THIS:
                {
                alt10=1;
                }
                break;
            case INTEGER:
            case DECIMAL:
            case STRING:
                {
                alt10=2;
                }
                break;
            case IDENTIFIER:
                {
                alt10=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 10, 0, input);

                throw nvae;
            }

            switch (alt10) {
                case 1 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:104:10: keyword
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_keyword_in_mapKey542);
                    keyword50=keyword();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, keyword50.getTree());

                    }
                    break;
                case 2 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:104:20: constant
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_constant_in_mapKey546);
                    constant51=constant();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, constant51.getTree());

                    }
                    break;
                case 3 :
                    // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:104:31: propertyChain
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_propertyChain_in_mapKey550);
                    propertyChain52=propertyChain();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, propertyChain52.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "mapKey"

    // $ANTLR start synpred2_PropertyExpressionParser
    public final void synpred2_PropertyExpressionParser_fragment() throws RecognitionException {   
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:49:4: ( rangeOp )
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:49:4: rangeOp
        {
        pushFollow(FOLLOW_rangeOp_in_synpred2_PropertyExpressionParser150);
        rangeOp();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred2_PropertyExpressionParser

    // $ANTLR start synpred3_PropertyExpressionParser
    public final void synpred3_PropertyExpressionParser_fragment() throws RecognitionException {   
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:50:4: ( constant )
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:50:4: constant
        {
        pushFollow(FOLLOW_constant_in_synpred3_PropertyExpressionParser155);
        constant();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred3_PropertyExpressionParser

    // $ANTLR start synpred4_PropertyExpressionParser
    public final void synpred4_PropertyExpressionParser_fragment() throws RecognitionException {   
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:51:4: ( propertyChain )
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:51:4: propertyChain
        {
        pushFollow(FOLLOW_propertyChain_in_synpred4_PropertyExpressionParser160);
        propertyChain();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred4_PropertyExpressionParser

    // $ANTLR start synpred12_PropertyExpressionParser
    public final void synpred12_PropertyExpressionParser_fragment() throws RecognitionException {   
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:62:4: ( term DEREF propertyChain )
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:62:4: term DEREF propertyChain
        {
        pushFollow(FOLLOW_term_in_synpred12_PropertyExpressionParser222);
        term();

        state._fsp--;
        if (state.failed) return ;
        match(input,DEREF,FOLLOW_DEREF_in_synpred12_PropertyExpressionParser224); if (state.failed) return ;
        pushFollow(FOLLOW_propertyChain_in_synpred12_PropertyExpressionParser226);
        propertyChain();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred12_PropertyExpressionParser

    // $ANTLR start synpred13_PropertyExpressionParser
    public final void synpred13_PropertyExpressionParser_fragment() throws RecognitionException {   
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:63:4: ( term SAFEDEREF propertyChain )
        // /Users/hlship/workspaces/tapestry/tapestry5/tapestry-core/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g:63:4: term SAFEDEREF propertyChain
        {
        pushFollow(FOLLOW_term_in_synpred13_PropertyExpressionParser241);
        term();

        state._fsp--;
        if (state.failed) return ;
        match(input,SAFEDEREF,FOLLOW_SAFEDEREF_in_synpred13_PropertyExpressionParser243); if (state.failed) return ;
        pushFollow(FOLLOW_propertyChain_in_synpred13_PropertyExpressionParser245);
        propertyChain();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred13_PropertyExpressionParser

    // Delegated rules

    public final boolean synpred4_PropertyExpressionParser() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_PropertyExpressionParser_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred12_PropertyExpressionParser() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred12_PropertyExpressionParser_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred13_PropertyExpressionParser() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred13_PropertyExpressionParser_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred3_PropertyExpressionParser() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_PropertyExpressionParser_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred2_PropertyExpressionParser() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_PropertyExpressionParser_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA1 dfa1 = new DFA1(this);
    static final String DFA1_eotS =
        "\12\uffff";
    static final String DFA1_eofS =
        "\12\uffff";
    static final String DFA1_minS =
        "\1\4\1\uffff\2\0\6\uffff";
    static final String DFA1_maxS =
        "\1\51\1\uffff\2\0\6\uffff";
    static final String DFA1_acceptS =
        "\1\uffff\1\1\2\uffff\1\3\1\5\1\6\1\7\1\2\1\4";
    static final String DFA1_specialS =
        "\2\uffff\1\0\1\1\6\uffff}>";
    static final String[] DFA1_transitionS = {
            "\1\2\2\uffff\1\4\5\uffff\1\5\2\uffff\1\6\1\7\16\uffff\4\1\2"+
            "\uffff\1\3\2\uffff\1\4",
            "",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA1_eot = DFA.unpackEncodedString(DFA1_eotS);
    static final short[] DFA1_eof = DFA.unpackEncodedString(DFA1_eofS);
    static final char[] DFA1_min = DFA.unpackEncodedStringToUnsignedChars(DFA1_minS);
    static final char[] DFA1_max = DFA.unpackEncodedStringToUnsignedChars(DFA1_maxS);
    static final short[] DFA1_accept = DFA.unpackEncodedString(DFA1_acceptS);
    static final short[] DFA1_special = DFA.unpackEncodedString(DFA1_specialS);
    static final short[][] DFA1_transition;

    static {
        int numStates = DFA1_transitionS.length;
        DFA1_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA1_transition[i] = DFA.unpackEncodedString(DFA1_transitionS[i]);
        }
    }

    class DFA1 extends DFA {

        public DFA1(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 1;
            this.eot = DFA1_eot;
            this.eof = DFA1_eof;
            this.min = DFA1_min;
            this.max = DFA1_max;
            this.accept = DFA1_accept;
            this.special = DFA1_special;
            this.transition = DFA1_transition;
        }
        public String getDescription() {
            return "47:1: expression : ( keyword | rangeOp | constant | propertyChain | list | notOp | map );";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA1_2 = input.LA(1);

                         
                        int index1_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred2_PropertyExpressionParser()) ) {s = 8;}

                        else if ( (synpred3_PropertyExpressionParser()) ) {s = 4;}

                         
                        input.seek(index1_2);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA1_3 = input.LA(1);

                         
                        int index1_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred2_PropertyExpressionParser()) ) {s = 8;}

                        else if ( (synpred4_PropertyExpressionParser()) ) {s = 9;}

                         
                        input.seek(index1_3);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 1, _s, input);
            error(nvae);
            throw nvae;
        }
    }
 

    public static final BitSet FOLLOW_expression_in_start130 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_start133 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_keyword_in_expression145 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rangeOp_in_expression150 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_constant_in_expression155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_propertyChain_in_expression160 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_list_in_expression165 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_notOp_in_expression170 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_map_in_expression175 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_keyword0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_constant0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_term_in_propertyChain222 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_DEREF_in_propertyChain224 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_propertyChain_in_propertyChain226 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_term_in_propertyChain241 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_SAFEDEREF_in_propertyChain243 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_propertyChain_in_propertyChain245 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_term_in_propertyChain260 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_term272 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_methodInvocation_in_term277 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_methodInvocation291 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_LPAREN_in_methodInvocation293 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_RPAREN_in_methodInvocation295 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_methodInvocation311 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_LPAREN_in_methodInvocation313 = new BitSet(new long[]{0x0000024F00032090L});
    public static final BitSet FOLLOW_expressionList_in_methodInvocation315 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_RPAREN_in_methodInvocation317 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_expressionList341 = new BitSet(new long[]{0x0000000000008002L});
    public static final BitSet FOLLOW_COMMA_in_expressionList344 = new BitSet(new long[]{0x0000024F00032090L});
    public static final BitSet FOLLOW_expression_in_expressionList347 = new BitSet(new long[]{0x0000000000008002L});
    public static final BitSet FOLLOW_rangeopArg_in_rangeOp363 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_RANGEOP_in_rangeOp366 = new BitSet(new long[]{0x0000004000000010L});
    public static final BitSet FOLLOW_rangeopArg_in_rangeOp370 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INTEGER_in_rangeopArg396 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_propertyChain_in_rangeopArg401 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LBRACKET_in_list413 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_RBRACKET_in_list415 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LBRACKET_in_list426 = new BitSet(new long[]{0x0000024F00032090L});
    public static final BitSet FOLLOW_expressionList_in_list428 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_RBRACKET_in_list430 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BANG_in_notOp451 = new BitSet(new long[]{0x0000024F00032090L});
    public static final BitSet FOLLOW_expression_in_notOp453 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LBRACE_in_map472 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_RBRACE_in_map474 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LBRACE_in_map485 = new BitSet(new long[]{0x0000024F00000090L});
    public static final BitSet FOLLOW_mapEntryList_in_map487 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_RBRACE_in_map489 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_mapEntry_in_mapEntryList511 = new BitSet(new long[]{0x0000000000008002L});
    public static final BitSet FOLLOW_COMMA_in_mapEntryList514 = new BitSet(new long[]{0x0000024F00000090L});
    public static final BitSet FOLLOW_mapEntry_in_mapEntryList517 = new BitSet(new long[]{0x0000000000008002L});
    public static final BitSet FOLLOW_mapKey_in_mapEntry528 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_COLON_in_mapEntry530 = new BitSet(new long[]{0x0000024F00032090L});
    public static final BitSet FOLLOW_expression_in_mapEntry533 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_keyword_in_mapKey542 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_constant_in_mapKey546 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_propertyChain_in_mapKey550 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rangeOp_in_synpred2_PropertyExpressionParser150 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_constant_in_synpred3_PropertyExpressionParser155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_propertyChain_in_synpred4_PropertyExpressionParser160 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_term_in_synpred12_PropertyExpressionParser222 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_DEREF_in_synpred12_PropertyExpressionParser224 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_propertyChain_in_synpred12_PropertyExpressionParser226 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_term_in_synpred13_PropertyExpressionParser241 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_SAFEDEREF_in_synpred13_PropertyExpressionParser243 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_propertyChain_in_synpred13_PropertyExpressionParser245 = new BitSet(new long[]{0x0000000000000002L});

}